package boot

import (
	"fmt"
	"gino/global"
	"github.com/gomodule/redigo/redis"
	"log"
	"time"
)

func Redis() {
	redisCfg := global.Config.Redis

	global.Redis = &redis.Pool{
		// 连接池中空闲连接的最大数目
		MaxIdle: redisCfg.MaxIdle,
		// 连接池在给定时间分配的最大连接数 0-无限制
		MaxActive: redisCfg.MaxActive,
		// 超时之后连接池空闲连接关闭
		IdleTimeout: redisCfg.IdleTimeout,
		// 连接
		Dial: func() (redis.Conn, error) {
			c, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", redisCfg.Host, redisCfg.Port))
			if err != nil {
				log.Fatal("Redis dial failed " + err.Error())
			}

			if redisCfg.Password != "" {
				if _, err := c.Do("AUTH", redisCfg.Password); err != nil {
					c.Close()
					log.Fatal("Redis auth failed " + err.Error())
				}
			}
			return c, err
		},
		// 检查
		TestOnBorrow: func(c redis.Conn, t time.Time) error {
			_, err := c.Do("PING")
			return err
		},
	}
}
